From: Giovanni Campagna Date: Tue, 4 Sep 2012 18:47:20 +0000 (+0200) Subject: ScreenShield: wait for stage mapping before taking a grab X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5869 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=be290fafe7ff8abbecdeb760f8adc0de28466558;p=gnome-shell.git ScreenShield: wait for stage mapping before taking a grab In gdm, we would attempt to become modal during the synchronous initialization, and this would fail, as X prevents grabs on unmapped windows. Instead, wait for the stage to be visible before becoming modal. https://bugzilla.gnome.org/show_bug.cgi?id=683357 --- diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index 8f93e4a27..21e05673e 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -558,10 +558,16 @@ const ScreenShield = new Lang.Class({ }, showDialog: function() { - if (!this._isModal) { - Main.pushModal(this.actor); - this._isModal = true; - } + // Ensure that the stage window is mapped, before taking a grab + // otherwise X errors out + Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { + if (!this._isModal) { + Main.pushModal(this.actor); + this._isModal = true; + } + + return false; + })); this.actor.show(); this._isGreeter = Main.sessionMode.isGreeter;